<?php
 /**
 * PHPExcel Reading Excel5 Demo
 * @version 1.0, 2014-11-14
 * 先要在站点根目录下创建Classes文件夹,拷贝库文件,才能够引用
 */
/** 中文输出 **/
header("Content-type:text/html; charset=utf-8");

error_reporting(E_ALL);

/** 持续运行 **/
set_time_limit(0);

/** 时区修改 **/
date_default_timezone_set('Asia/Shanghai');

/** 注意:应为包含后的相对路径PHPExcel_IOFactory */
require_once '../resource/Classes/PHPExcel/IOFactory.php';

/** 设置缓存方式 **/
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

/*ReadingExcel5-xls文件预读取'的写法：获取预读取工作簿文件：
				$inputFileType='Excel5';
				$inputFileName='./xls/partner.xls';
				$sheetname='partner';
				$currentIndex=0;
				$currentSheet=Pre_ReadingExcel5($inputFileType,$inputFileName,$sheetname,$currentIndex);

*/				
function  Pre_ReadingExcel5($inputFileType,$inputFileName,$sheetname,$currentIndex)
{
/** 参数列表 **/

/** 文件类型,文件路径及名称,工作簿名称,工作簿索引,匹配字段数组,匹配列索引,目标列关联数组(字段名称,索引值),返回数组 **/

/** 以下创建PHPExcel相应对象 **/

/**  按照 $inputFileType 中的文件类型构造相应的读取器 **/ 
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

/**  确定读取器所读取的工作表的确切名称  **/
$objReader->setLoadSheetsOnly($sheetname);

/**  通过$inputFileName 将被访问文件对象加载到PHPExcel 对象  **/
$objPHPExcel = $objReader->load($inputFileName);

/** 通过表的索引值来访问表当中的工作簿 **/
$currentSheet = $objPHPExcel->getSheet($currentIndex);

/** 返回预读取的工作簿 **/
return $currentSheet;
}

/*定义工作簿源及目标字段的匹配方法查询函数
				$queryID = $row['id'];
				$sourceColumn=0;
				$MatchColumn = array("typeid"=>0,"typename"=>1);
				$row_02_=findMatch($currentSheet,$queryID,$sourceColumn,$MatchColumn);	*/
				
function  findMatch($currentSheet,$queryID,$sourceColumn,$MatchColumn){

$field_match = array();

/** 确定循环参数 **/

$highestColumn = $currentSheet->getHighestColumn();		//取得当前工作表最大列号,比如 K
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);	//转换数据表最大的列数的索引值
$highestRow = $currentSheet->getHighestRow();			//取得当前工作表总行数

	//查询匹配，终止循环
	for ($row = 1; $row <= $highestRow; $row++) {

	// 确定当前行当中被检索列的确切值
	$currentId = $currentSheet->getCellByColumnAndRow($sourceColumn, $row)->getValue();

	// 匹配查询ID和当前行检索列的ID值
	if( $currentId == $queryID ){
		foreach ($MatchColumn as $key => $value) {
			$field_temp = $currentSheet->getCellByColumnAndRow($value, $row)->getValue();
			if($field_temp instanceof PHPExcel_RichText){     //如果单元格当中有不同字体文本,取值结果为富文本对象,因此需要将对象转换为字符串
				$field_temp = $field_temp->__toString();
			}
			$field_match[$key] = $field_temp;
		}
		$row = $highestRow+1;	//跳出查询循环
		}else if ($highestRow==$row){
			
			#如果循环到达最末行还是没有找到匹配记录的时候,将查询数组内容赋值为null
			foreach ($MatchColumn as $key => $value) {
			$field_match[$key]= null;}
			$row = $highestRow+1;	//跳出查询循环
		}
	}
	return $field_match;			//返回字段匹配数组
}

/*定义工作簿源目标字段的匹配查询函数,$sourceColumn为名称键值对数组,分别定义所需查询的目标列及其保存时候的键名称*/
function  get_Columns($currentSheet,$sourceColumn){

	$items = array();								//定义输出的结果数组
	$row   = array();								//临时数组保存每条记录数据

	/** 确定循环参数 **/

	$highestColumn = $currentSheet->getHighestColumn();		//取得当前工作表最大列号,比如 K
	$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);	//转换数据表最大的列数的索引值
	$highestRow = $currentSheet->getHighestRow();			//取得当前工作表总行数

	//查询匹配，终止循环
	//注意去除标题行之后起始的行数为2
	for ($rownum = 2; $rownum <= $highestRow; $rownum++) {

	// 查询当前记录目标列匹配字段所有的字段值

	foreach ($sourceColumn as $key => $value) {
	$row[$key] = $currentSheet->getCellByColumnAndRow($value, $rownum)->getValue();
	if($row[$key] instanceof PHPExcel_RichText)     //如果单元格当中有不同字体文本,取值结果为富文本对象,因此需要将对象转换为字符串
            $row[$key] = $row[$key]->__toString();
	}
	array_push($items, $row);
	}

	return $items;	//返回结果数组
}
?>
